<!DOCTYPE HTML>
<html>
<head>
<title>MsgBox | AutoHotkey v1</title>
<meta name="description" content="The MsgBox command displays the specified text in a small window containing one or more buttons (such as Yes and No)." />
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link href="../static/theme.css" rel="stylesheet" type="text/css" />
<script src="../static/content.js" type="text/javascript"></script>
</head>
<body>

<h1>MsgBox</h1>

<p>在含有一个或多个按钮(例如 "是" 和 "否") 的小窗口中显示指定的文本 .</p>

<pre class="Syntax">
<span class="func">MsgBox</span> <span class="optional">, Text</span>
<span class="func">MsgBox</span> <span class="optional">, Options, Title, Text, Timeout</span>
</pre>
<h2 id="Parameters">参数</h2>
<dl>

  <dt>Text(文本)</dt>
  <dd><p>在 1-参数模式, 如果省略, 则默认为字符串 "Press OK to continue." 文本. 在其他模式, 如果省略, 则默认为空字符串. 否则, 请指定消息框中显示的文本, 用来引导用户如何操作或提示信息.</p>
    <p>可以使用<a href="../misc/EscapeChar.htm">转义序列</a>来显示特殊字符. 例如, `n 表示换行符, 它结束当前行并开始一个新行. 因此使用 <code>text1`n`ntext2</code> 会在 text1 和 text2 之间添加一个空行.</p>
    <p>如果 <em>Text</em> 较长, 可以通过<a href="../Scripts.htm#continuation">延续片段</a>的方法将其分解成较短的几行, 这样可以增加可读性和可维护性.</p></dd>

  <dt>Options(选项)</dt>
  <dd><p>如果为空或省略, 默认为 0(只显示一个 OK 按钮). 否则, 指定下表中值的组合(和), 以指示消息框的类型和可能的按钮组合.</p>
    <p>此参数必须为原义的数字或在 <span class="ver">[v1.1.06+]</span> 强制表达式, 例如 <code>% Options</code>. 任何其他非空值都不会被看做是此参数, 相反的只是被认为是 1-参数模式中 <em>Text</em> 的一部分.</p></dd>

  <dt>Title(标题)</dt>
  <dd><p>如果为空或省略, 默认为脚本的名称(不包括路径). 否则, 请指定对话框的标题.</p></dd>

  <dt id="Timeout">Timeout(超时)</dt>
  <dd><p>如果为空或省略, 则不会自动关闭消息框. 否则, 请指定超时的秒数, 默认情况下可以为小数但不能是表达式. <span class="ver">[v1.1.06+]</span>: 此参数可以强制为表达式, 例如 <code>% mins*60</code>.</p>
    <p>如果这个值超过 2147483(24.8 天), 那么它会被设置为 2147483. 经过这个超时时间后消息框将自动关闭且 <a href="IfMsgBox.htm">IfMsgBox</a> 命令将看到表示超时状态的值 TIMEOUT.</p>
    <p><span class="ver">[v1.1.30.01]</span> 修复以下限制: 如果消息框仅含有一个 "确定" 按钮, 且当消息框自身的<a href="../misc/Threads.htm">线程</a>由于被另一个线程中断而处于非活动状态, 那么 <a href="IfMsgBox.htm">IfMsgBox</a> 将认为消息框超时且用户按下了 "确定" 按钮.</p></dd>

</dl>

<h2 id="Options"><em>Options</em> 参数的值</h2>
<p><em>选项</em> 参数可以是以下组的值的组合(和).</p>
<h3 id="Group_1_Buttons">组 #1: 按钮</h3>
<p>若要指定在消息框中显示的按钮, 请添加以下值 <u>之一:</u></p>
<table class="info">
  <tr>
    <th style="width:287px">功能</th>
    <th abbr="Dec">十进制值</th>
    <th abbr="Hex">十六进制值</th>
  </tr>
  <tr>
    <td>确定(即仅显示一个 "确定" 按钮)</td>
    <td>0</td>
    <td>0x0</td>
  </tr>
  <tr>
    <td>确定/取消</td>
    <td>1</td>
    <td>0x1</td>
  </tr>
  <tr>
    <td>终止/重试/忽略</td>
    <td>2</td>
    <td>0x2</td>
  </tr>
  <tr>
    <td>是/否/取消</td>
    <td>3</td>
    <td>0x3</td>
  </tr>
  <tr>
    <td>是/否</td>
    <td>4</td>
    <td>0x4</td>
  </tr>
  <tr>
    <td>重试/取消</td>
    <td>5</td>
    <td>0x5</td>
  </tr>
  <tr>
    <td>取消/重试/继续</td>
    <td>6</td>
    <td>0x6</td>
  </tr>
  </table>
<h3 id="Group_2_Icon">组 #2: 图标</h3>
<p>要在消息框中显示一个图标, 请添加以下值 <u>之一:</u></p>
<table class="info">
  <tr>
    <th style="width:287px">功能</th>
    <th abbr="Dec">十进制值</th>
    <th abbr="Hex">十六进制值</th>
  </tr>
  <tr>
    <td>错误图标(停止/错误)</td>
    <td>16</td>
    <td>0x10</td>
  </tr>
  <tr>
    <td>问号图标</td>
    <td>32</td>
    <td>0x20</td>
  </tr>
  <tr>
    <td>惊叹号图标</td>
    <td>48</td>
    <td>0x30</td>
  </tr>
  <tr>
    <td>星号图标(信息)</td>
    <td>64</td>
    <td>0x40</td>
  </tr>
  </table>
<h3 id="Group_3_Default_Button">组 #3: 默认按钮</h3>
<p>若要指定默认按钮, 请添加以下值 <u>之一:</u></p>
<table class="info">
  <tr>
    <th style="width:287px">功能</th>
    <th abbr="Dec">十进制值</th>
    <th abbr="Hex">十六进制值</th>
  </tr>
  <tr>
    <td>让第二个按钮成为默认按钮</td>
    <td>256</td>
    <td>0x100</td>
  </tr>
  <tr>
    <td>让第三个按钮成为默认按钮</td>
    <td>512</td>
    <td>0x200</td>
  </tr>
  <tr>
    <td>使第四个按钮为默认的<br>(需要帮助按钮)</td>
    <td>768</td>
    <td>0x300</td>
  </tr>
  </table>
<h3 id="Group_4_Modality">组 #4: 模式</h3>
<p>若要指定对话框的模式, 请添加以下值 <u>之一:</u></p>
<table class="info">
  <tr>
    <th style="width:287px">功能</th>
    <th abbr="Dec">十进制值</th>
    <th abbr="Hex">十六进制值</th>
  </tr>
  <tr>
    <td>系统模式(总是在顶部)</td>
    <td>4096</td>
    <td>0x1000</td>
  </tr>
  <tr>
    <td>任务模式</td>
    <td>8192</td>
    <td>0x2000</td>
  </tr>
  <tr>
    <td>置顶(WS_EX_TOPMOST 样式)<br>
      (和系统模式类似, 但省略了标题栏图标)</td>
    <td>262144</td>
    <td>0x40000</td>
  </tr>
  </table>
<h3 id="Group_5_Other_Options">组 #5: 其他选项</h3>
<p>若要指定其他选项, 请添加以下值中的 <u>一个或多个:</u></p>
<table class="info">
  <tr>
    <th style="width:287px">功能</th>
    <th abbr="Dec">十进制值</th>
    <th abbr="Hex">十六进制值</th>
  </tr>
  <tr>
    <td>添加一个帮助按钮(请参阅后面的备注)</td>
    <td>16384</td>
    <td>0x4000</td>
  </tr>
  <tr>
    <td>让文本右对齐显示</td>
    <td>524288</td>
    <td>0x80000</td>
  </tr>
  <tr>
    <td>用于希伯来语/阿拉伯语的从右向左的阅读顺序</td>
    <td>1048576</td>
    <td>0x100000</td>
  </tr>
</table>
<h2 id="Remarks">备注</h2>
<p>消息框通常看起来像这样:</p>
<img src="../static/pics/dlg_message.png" alt="MsgBox" />
<p>使用上面的表格时, 可以把您期望用于消息框的选项值加在一起. 例如, 要显示一个默认按钮为 "否" 的 "是"/"否" 消息框, 那么需要把 <em>Options</em> 的值设置为 256+4(260). 使用十六进制表示为 0x100+0x4(0x104).</p>
<p>MsgBox 对逗号的处理比较智能, 所以通常不需要对 <em>Text</em> 参数中的逗号进行<a href="../misc/EscapeChar.htm">转义</a>.</p>
<p>要判断用户在最近的消息框中按下了哪个按钮, 请使用 <a href="IfMsgBox.htm">IfMsgBox</a> 命令. 例如:</p>
<pre>MsgBox, 4,, Would you like to continue? (press Yes or No)
IfMsgBox Yes
    MsgBox You pressed Yes.
else
    MsgBox You pressed No.</pre>
<p>若要自定义按钮的名称, 请参阅<a href="../scripts/index.htm#MsgBoxButtonNames">改变 MsgBox 的按钮名称</a>.</p>
<p class="note"><strong>注意:</strong> 当消息框窗口活动时按下 <kbd>Ctrl</kbd>+<kbd>C</kbd> 将复制其中的文本到剪贴板. 这适用于所有的消息框, 而不仅是 AutoHotkey 生成的那些.</p>
<p><strong>GUI 窗口当作 MsgBox:</strong> 通过 <a href="Gui.htm#OwnDialogs">Gui +OwnDialogs</a> 的方法一个 GUI 窗口可以显示为 <em>模式</em> 对话框(MsgBox). <em>模式</em> 对话框在其消失之前会阻止用户与原来的 GUI 窗口进行交互. 此时, 不需要指定上表中的系统模式或任务模式选项.</p>
<p>当 <a href="Gui.htm#OwnDialogs">Gui +OwnDialogs</a> <em>无效</em> 时, 在用户响应 MsgBox 前可以使用任务模式选项(8192) 来禁用所有的脚本窗口.</p>
<p><strong>"帮助" 按钮:</strong> 在 <em>Options</em> 中使用了 "帮助" 按钮选项(16384) 时, 只有符合下面两个条件, 那么按下 "帮助" 按钮才会有效果:</p>
<ol>
  <li>消息框是由 GUI 窗口通过 <a href="Gui.htm#OwnDialogs">Gui +OwnDialogs</a> 的方法显示的.</li>
  <li>脚本正在监听 WM_HELP 消息(0x0053). 例如: <code><a href="OnMessage.htm">OnMessage</a>(0x0053, "WM_HELP")</code>. 调用 WM_HELP() 函数时, 它可以通过如显示另一个窗口或消息框的方法引导用户.</li>
</ol>
<p><strong>关闭按钮(在消息框的标题栏):</strong> 由于消息框窗口是操作系统内置的特性, 所以它的 X 按钮仅在某些按钮存在时才会启用. 如果只有一个 "确定" 按钮, 那么点击 X 按钮等同于按下 "确定" 按钮. 其他情况下, 只有含有 "取消" 按钮时才会启用 X 按钮, 此时点击 X 等同于按下 "取消" 按钮.</p>

<h2 id="Related">相关</h2>
<p><a href="IfMsgBox.htm">IfMsgBox</a>, <a href="InputBox.htm">InputBox</a>, <a href="FileSelectFile.htm">FileSelectFile</a>, <a href="FileSelectFolder.htm">FileSelectFolder</a>, <a href="ToolTip.htm">ToolTip</a>, <a href="Gui.htm">GUI</a></p>

<h2 id="Examples">示例</h2>
<div class="ex" id="ExOneParam">
<p><a class="ex_number" href="#ExOneParam"></a> 1-参数模式. 一种简单快捷的信息显示方式. 用户可以按确定按钮关闭消息框, 继续执行.</p>
<pre>MsgBox This is the 1-parameter mode. Commas (,) do not need to be escaped.</pre>
</div>

<div class="ex" id="ExThreeParam">
<p><a class="ex_number" href="#ExThreeParam"></a> 3-参数模式. 使用第 1 个和第 2 个参数来指定选项和标题.</p>
<pre>MsgBox, 4, , This is the 3-parameter mode. Commas (,) do not need to be escaped.</pre>
</div>

<div class="ex" id="ExIfMsgBox">
<p><a class="ex_number" href="#ExIfMsgBox"></a> 使用 <a href="IfMsgBox.htm">IfMsgBox</a> 来确定用户在最近的消息框中按下了哪个按钮.</p>
<pre>MsgBox, 4, , Do you want to continue? (Press YES or NO)
IfMsgBox No
    return</pre>
</div>

<div class="ex" id="ExTimeout">
<p><a class="ex_number" href="#ExTimeout"></a> 4-参数模式. 使用第 4 个参数(Timeout) 在一定秒数后自动关闭消息框.</p>
<pre>MsgBox, 4, , 4-parameter mode: this MsgBox will time out in 5 seconds.  Continue?, 5
IfMsgBox Timeout
    MsgBox You didn't press YES or NO within the 5-second period.
else IfMsgBox No
    return</pre>
</div>

<div class="ex" id="ExExpression">
<p><a class="ex_number" href="#ExExpression"></a> 通过在任何参数前加上 <code>% </code>, 可以让此参数支持<a href="../Variables.htm#Expressions">表达式</a>. 在下面的例子中, 执行数学运算, 访问<a href="../misc/Arrays.htm#pseudo">伪数组</a>元素和调用函数. 所有这些项目都可以通过 "." 运算符串联成 MsgBox 可以显示的单个字符串.</p>
<pre>MsgBox % "New width for object #" . A_Index . " is: " . RestrictWidth(ObjectWidth%A_Index% * ScalingFactor)</pre>
</div>

<div class="ex" id="ExFocus">
<p><a class="ex_number" href="#ExFocus"></a> 提醒用户消息框即将获取焦点(如果用户正在输入).</p>
<pre>SplashTextOn,,, A message box is about to appear.
Sleep 3000
SplashTextOff
MsgBox The backup process has completed.</pre>
</div>

</body>
</html>